package 力扣算法练习.main1.part2;

public class day21 {
    /*
    给你一个字符串 s，由若干单词组成，单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
    单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
    https://leetcode.cn/problems/length-of-last-word
     */
    public int lengthOfLastWord(String s) {
        int result=0,temp=0,length=s.length();
        for (int i = 0; i < length; i++) {
            if (s.charAt(i)==32){
                if (i!=length-1){
                    temp=0;
                }
            }else{
                //不为空格
                temp++;
            }
            if (temp!=0){
                result=temp;
            }
        }
        return result;
    }
    //改进,反向遍历(虽然时间复杂度和上面一样都是o(n)但一般情况反向要快一点
    public int lengthOfLastWord1(String s){
        int result=0;
        for (int i =s.length()-1; i >=0 ; i--) {
            if (s.charAt(i)==32){
                if (result>0)return result;
            }else{
                result++;
            }
        }
        return result;
    }



    /*
    给你一个正整数 n ，生成一个包含 1 到 n2 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix
    https://leetcode.cn/problems/spiral-matrix-ii/
     */
    public int[][] generateMatrix(int n) {
        //类似于之前的转圈遍历二维数组
        int sum=n*n,temp=1;
        int [][] result=new int[n][n];
        int top=0,bottom=n-1,left=0,right=n-1;
        while(sum>=temp){
            for (int i =left; i <=right&&sum>=temp ; i++) {
                result[top][i]=temp++;
            }
            top++;
            for (int i =top; i <=bottom&&sum>=temp ; i++) {
                result[i][right]=temp++;
            }
            right--;
            for (int i =right; i >=left&&sum>=temp ; i--) {
                result[bottom][i]=temp++;
            }
            bottom--;
            for (int i =bottom; i>=top&&sum>=temp ; i--) {
                result[i][left]=temp++;
            }
            left++;
        }
        return result;
    }

}
